from werkzeug.exceptions import HTTPException
from app import create_app
from app.libs.error import APIException

app = create_app()


@app.errorhandler(Exception)
def all_error(e):
    ''' 这个e是任何异常对象,因为我们监听了Exception这个对象.
        所以这个函数会对所有异常做同一处理,包括已知异常和未知异常
        增强了异常处理的逻辑,这样项目里产生的异常信息就都能捕获到了
        tag: 适合前后段分离的模式,可以统一返回json对象,不分离模式下,不需要这么复杂,直接监听对应的异常即可'''
    if isinstance(e, APIException): # isinstance先判断类型是否一致,在判断是否有继承关系
        return e
    if isinstance(e, HTTPException):
        code = e.code
        msg = e.description
        error_code = 1007 # HTTPError
        return APIException(code, msg, error_code)
    else:
        # 处理未知error,启动调试模式时,返回完成error完成信息,其他情况返回json对象
        if app.config['DEBUG']:
            raise e
        else:
            return APIException()


if __name__ == '__main__':
    app.run()
